package grupo6.mc548;



import java.util.ArrayList;

public class Solucao {
	private ArrayList<EstacaoDeEmissao> estacoes;
	private int[] pontosCobertos;
	private int pontosFaltantes;
	private double custo;
	
	public Solucao(int numeroPontos, int numeroEstacoes) {
		int i;
        pontosCobertos = new int[numeroPontos];
        estacoes = new ArrayList<EstacaoDeEmissao>();
        
		for(i=0;i<numeroPontos;i++)
			pontosCobertos[i] = 0;
		
		this.pontosFaltantes=numeroPontos;
	}
	
	public int getPontosCobertos() {
		return (pontosCobertos.length - pontosFaltantes);
	}
	
	public double getCusto()  {
		return custo;
	}

        public int getNumeroEstacoes(){
                return estacoes.size();
        }

        public ArrayList<EstacaoDeEmissao> getEstacoes(){
                return estacoes;
        }
	/* Percorre a ArrayList com os pontos cobertos da estacao e adiciona ao vetor 
	 * Se for um novo ponto subtrai de pontos faltantes */
	public void addEstacao(EstacaoDeEmissao estacao) {
		estacoes.add(estacao);
		custo += estacao.getCusto();
		for(int p : estacao.getPontosCobertos()) {
			if(pontosCobertos[p-1] == 0)
				pontosFaltantes--;
			pontosCobertos[p-1]++;
		}
	}
	
	/* Percorre a ArrayList com os pontos cobertos da estacao e remove do vetor 
	 * Se for um novo ponto subtrai de pontos faltantes */
	public void removeEstacao(EstacaoDeEmissao estacao) {
		if(estacoes.contains(estacao)) {
			for(int p : estacao.getPontosCobertos()) {
				pontosCobertos[p-1]--;
				if(pontosCobertos[p-1] <= 0)
					pontosFaltantes++;
			}
			estacoes.remove(estacao);
			custo -= estacao.getCusto();
		}
	}
}
